package CargaJuego;

import java.util.HashMap;

import General.Constantes;
import Logica.Enemigos.Enemigo;
import Logica.Enemigos.Goomba;
import Logica.Enemigos.Koopa;
import Logica.Enemigos.Monkey;

/**
 * Mapeo de caracteres para cargar un nivel. Realiza un mapeo desde un caracter (char) a una Celda..
 * 
 * @author Mariano Rodecker
 * @author Matias Varela
 * 
 */
public class MapeoCaracteresEnemigos {
	/* ################## ATRIBUTOS DE INSTANCIA ######################## */
	protected HashMap<Character, Enemigo> mapeo;

	/* ################## CONSTRUCTORES ######################## */
	/**
	 * Constructor para un mapeo de caracteres para cargar un nivel. El constructor inicializa el
	 * estado interno y realiza el mapeo .
	 * 
	 * @param carg
	 *            - cargador necesario para obtener los spriteMovements
	 */
	public MapeoCaracteresEnemigos(Cargador carg) {
		mapeo = new HashMap<Character, Enemigo>();
		cargarMapa(carg);
	}

	/* ################## CONSULTAS ######################## */
	/**
	 * Obtiene una celda a partir de una clave dada.
	 * 
	 * @param clave
	 * @return una celda a partir de una clave dada.
	 */
	public Enemigo getEnemigo(Character clave) {
		return mapeo.get(clave);
	}

	/* ################## METODOS DE LA CLASE ######################## */
	/*
	 * Se necesita el cargador para poder obtener los SpriteMovements (se asume que estos mismos
	 * fueron cargados por el cargador previamente) de las celdas
	 */
	private void cargarMapa(Cargador carg) {
		Goomba goomba = null;
		Koopa koopa = null;
		Monkey monkey=null;

		// 'B' corresponde a un Troopa
		Character T = new Character('B');
		goomba = new Goomba(Constantes.sizeEnemigos, Constantes.sizeEnemigos, carg.getAniGoomba(), carg.getIg());
		goomba.setInteligencia(carg.getIntel());
		mapeo.put(T, goomba);

		// 'C' corresponde a un Koopa
		Character K = new Character('C');
		koopa = new Koopa(Constantes.sizeKoopaX, Constantes.sizeKoopaY, carg.getAniKoopa(), carg.getIg());
		koopa.setInteligencia(carg.getIntel());
		mapeo.put(K, koopa);

		// 'X' corresponde a un Koopa
		Character X = new Character('X');
		monkey = new Monkey(Constantes.sizeMonkeyX, Constantes.sizeMonkeyY, carg.getAniMonkey(), carg.getIg());
		monkey.setInteligencia(carg.getIntel());
		mapeo.put(X, monkey);

	}

}